package com.molihub.service;

import com.molihub.entity.Message;

import java.util.List;

/**
 * @InterfaceName: MessageService
 * @Description: 用户消息业务层接口
 * @author: xw
 * @date 2020/2/22 13:50
 * @Version: 1.0
 **/
public interface MessageService {

    /**
     * @return com.molihub.entity.Message 注意要封装好实体类
     * @Description 根据消息ID获得消息
     * @Author xw
     * @Date 14:12 2020/2/22
     * @Param [messageId]
     **/
    Message getMessageById(int messageId);

    /**
     * @return java.util.List<com.molihub.entity.Message> 注意要封装好实体类
     * @Description 获取用户的全部消息，按照时间降序
     * 消息接收方用户ID = userId
     * @Author xw
     * @Date 13:51 2020/2/22
     * @Param []
     **/
    List<Message> getAllMessage(int userId);

    /**
     * @return java.util.List<com.molihub.entity.Message> 注意要封装好实体类
     * @Description 以阅读状态为条件, 获取用户的全部消息，按照时间降序
     * 消息接收方用户ID = userId
     * looked 为 true时，获得所有的已读消息
     * looked 为 false时，获得所有的未读消息
     * @Author xw
     * @Date 13:51 2020/2/22
     * @Param []
     **/
    List<Message> getAllMessageWithCondition(int userId, boolean looked);

    /**
     * @return java.util.List<com.molihub.entity.Message> 注意要封装好实体类
     * @Description 获取指定类型的消息（共三种），按照时间降序
     * type = 1 :关注类型的消息
     * type = 2 :点赞类型的消息
     * type = 3 :评论类型的消息
     * @Author xw
     * @Date 14:04 2020/2/22
     * @Param [userId, type]
     **/
    List<Message> getMessagesByType(int userId, int type);

    /**
     * @return void
     * @Description 将指定类型的消息设置为已读状态
     * type = 0 :所有类型的消息
     * type = 1 :关注类型的消息
     * type = 2 :点赞类型的消息
     * type = 3 :评论类型的消息
     * @Author xw
     * @Date 14:07 2020/2/22
     * @Param [userId, type]
     **/
    void setMessagesLooked(int userId, int type);

    /**
     * @return void
     * @Description 删除指定类型的消息
     * type = 0 :所有类型的消息
     * type = 1 :关注类型的消息
     * type = 2 :点赞类型的消息
     * type = 3 :评论类型的消息
     * @Author xw
     * @Date 14:07 2020/2/22
     * @Param [userId, type]
     **/
    void deleteMessages(int userId, int type);

    /**
     * @return void
     * @Description 删除指定id的消息
     * @Author xw
     * @Date 14:10 2020/2/22
     * @Param [messageId]
     **/
    void deleteMessage(int messageId);

    /**
     * 添加一条消息记录
     *
     * @param message 消息记录
     * @return java.lang.Integer
     * @author GGBOY
     * @date 2020/2/22
     */
    Integer addRecord(Message message);
}
